/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package analiseSintatica.Regras.Declaracoes;

import AnaliseLexicaFinal.EstruturaDeDados.LinkToken;
import analiseSemantica.Tipos.TipoSemantico;
import analiseSemantica.Tipos.TiposSemanticos;
import analiseSintatica.ErroSintaticoException;
import analiseSintatica.Regras.Regra;
import java.util.LinkedList;

/**
 *
 * @author Edney
 */
public class RegraArray extends Regra {


    protected static Regra instancia;
    protected String estrutura = "{'[' numeroInteiro ']'}";

    private RegraArray() {
    }

     public static RegraArray getInstance() {
        if (instancia == null) {
            instancia = new RegraArray();
        }
        return (RegraArray) instancia;
    }

    @Override
    public TiposSemanticos analisar(LinkedList<LinkToken> listaTokens) throws ErroSintaticoException {
        
    	int i = 0;
    	while(listaTokens.getFirst().getLexema().equals("[")){
    		reconheceToken(listaTokens, "[", estrutura);
        
    		reconheceToken(listaTokens, "numeroInteiro", estrutura);
            reconheceToken(listaTokens, "]", estrutura);
            i++;
        }

    	TiposSemanticos tipos = new TiposSemanticos();
    	tipos.addTipos(new TipoSemantico(String.valueOf(i), 0));
        return tipos;

    }

    @Override
    protected void setPrimeiro() {
       primeiro.add("[");
    }

}
